JSONObject 和 HashMap转字符串的说明

您所在的位置:网站首页 java map 转 json 字符串 JSONObject 和 HashMap转字符串的说明

JSONObject 和 HashMap转字符串的说明

2024-05-23 21:29| 来源: 网络整理| 查看: 265

简单比较说明

本篇博客,不是分析JSONObject 和 HashMap的底层原理和区别的,菜鸡一枚,没有这种能耐。

而是仅比较JSONObject 和 HashMap转字符串的情况,是做一个采坑心得,并对两者做简单比较总结。

public class HashMap extends AbstractMap implements Map, Cloneable, Serializable { // do something } public class JSONObject extends JSON implements Map, JSONAware, Cloneable, Serializable, InvocationHandler { // do something }

 通过上传截取的代码片段可以得知,HashMap基础功能主要来源于其继承的AbstractMap类,而JSONObject基础功能主要来源于其继承的HashMap类。

因此,基本上可以说在用法上 JSONObject和HashMap是没有明显差别的,可以混用(如有错误,请大佬督正)。

 

转字符串说明

在工作中,我也经常使用HashMap用于前后端交换数据。然而在一次三方平台对接中却遇到了一个问题,报错信息如下:

Exception in thread "main" com.alibaba.fastjson.JSONException: expect ':' at 0, actual = at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:266) at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1189) at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1158) at com.alibaba.fastjson.JSON.parse(JSON.java:102) at com.alibaba.fastjson.JSON.parse(JSON.java:93) at com.alibaba.fastjson.JSON.parseObject(JSON.java:164) at com.krt.api.controller.ApiLoginController.main(MainController.java:25)

主要问题是JSONObject 和 HashMap的toString() 方法是不一样的,且HashMap的toString() 方法更烂,转字符串之后无法转回来。

JSONObject转字符串后:{"a":123,"b":"123"}      // 后面还可以转换回来

HashMap转字符串后:{a=123, b=123}    // 基本报废,该字符串无法转换成其他Object

public static void main(String[] args) { JSONObject json = new JSONObject(); json.put("a", 123); json.put("b", "123"); HashMap map = new HashMap(); map.put("a", 123); map.put("b", "123"); System.out.println(json.toJSONString()); // {"a":123,"b":"123"} System.out.println(map.toString()); // {a=123, b=123} System.out.println(JSONObject.toJSONString(map)); // {"a":123,"b":"123"} // 可以转换 JSONObject json2 = JSONObject.parseObject("{\"a\":123,\"b\":\"123\"}"); // 可以转换 HashMap map2 = JSONObject.parseObject("{\"a\":123,\"b\":\"123\"}", HashMap.class); // 报错JSONException JSONObject json3 = JSONObject.parseObject("{a=123, b=123}"); // 报错JSONException HashMap map3 = JSONObject.parseObject("{a=123, b=123}", HashMap.class); }

 

总结

JSONObject和HashMap在用法上基本没有差别,但是需要注意HashMap的toString()方法。

用该方法转换的字符串,基本就报废了,没有意义,其他平台或方法接收后也无法解析回Object。

推荐使用JSONObject.toJSONString() 方法来,转换成字符串。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3